package com.pine.common.util.user;

import java.util.Collections;
import java.util.List;

/**
 * 用户信息
 *
 * @author pine manage
 * @since 2024-08-09
 */
public interface UserInfo {

    /**
     * 获取角色ID
     *
     * @return 角色ID
     */
    default Long roleId() {
        return 0L;
    }

    /**
     * 获取部门ID
     *
     * @return 部门ID
     */
    default Long deptId() {
        return 0L;
    }

    /**
     * 获取部门ID集合(当前部门及子部门信息)
     *
     * @return 部门ID集合
     */
    default List<Long> deptIds() {
        return Collections.singletonList(0L);
    }

    /**
     * 获取token
     *
     * @return token
     */
    default String token() {
        return "";
    }

    /**
     * 获取用户ID
     *
     * @return 用户ID
     */
    default Long id() {
        return 0L;
    }

    /**
     * 获取用户名
     *
     * @return 用户名
     */
    default String username() {
        return "";
    }

    /**
     * 获取登录账号
     *
     * @return 登录账号
     */
    default String loginAccount() {
        return "";
    }

    /**
     * 获取昵称
     *
     * @return 昵称
     */
    default String nickName() {
        return "";
    }

    /**
     * 获取手机号
     *
     * @return 手机号
     */
    default String phone() {
        return "";
    }

    /**
     * 获取邮箱
     *
     * @return 邮箱
     */
    default String email() {
        return "";
    }

    /**
     * 获取数据权限<br><pre>
     *     ALL(0, "所有数据"),
     *     DEPT_WITH_CHILDREN(1, "部门及子部门数据"),
     *     DEPT(2, "本部门数据"),
     *     ONLY_SELF(3, "本人数据"),
     *     ;</pre>
     *
     * @return 数据权限
     */
    default Integer dataScope() {
        return 3;
    }

    default String userInfoToString() {
        return "UserInfo{" +
                "token='" + token() + '\'' +
                ", id=" + id() +
                ", roleId=" + roleId() +
                ", loginAccount='" + loginAccount() + '\'' +
                ", deptIds=" + deptIds() +
                ", username='" + username() + '\'' +
                ", nickName='" + nickName() + '\'' +
                ", phone='" + phone() + '\'' +
                ",email='" + email() + '\'' + "}";
    }
}
